import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
// 使用dio请求数据
import 'package:dio/dio.dart';
// 解析数据
import 'dart:convert';

class CinemaList extends StatefulWidget {
  @override
  _CinemaListState createState() => _CinemaListState();
}

class _CinemaListState extends State<CinemaList> {
  // 设置自定义颜色
  Color _defaultgreen = Color.fromARGB(255, 88, 157, 175);
  Color _defaultorange = Color.fromARGB(255, 255, 153, 0);

  // 使用假数据
  List _mycinemaList = [];

  // 请求数据, 通过dio插件请求数据
  // https://github.com/flutterchina/dio
  _getcinemalist() async {
    String _url =
        'http://m.maoyan.com/ajax/cinemaList?day=2019-09-15&offset=0&limit=20&districtId=-1&lineId=-1&hallType=-1&brandId=-1&serviceId=-1&areaId=-1&stationId=-1&item=&updateShowDay=true&reqId=1568531041185&cityId=1';
    try {
      Dio _dio = new Dio();
      Response response = await _dio.get(_url);
      Map responseData = json.decode(response.toString());
      setState(() {
        _mycinemaList = responseData["cinemas"];
      });
    } catch (err) {
      print(err);
    }
  }

  @override
  void initState() {
    _getcinemalist();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    // 根据数组循环渲染
    return ListView.builder(
      itemCount: _mycinemaList.length,
      itemBuilder: (BuildContext context, int index) {
        Map _item = _mycinemaList[index];

        return Padding(
          padding: EdgeInsets.all(10),
          child: Column(
            // Column为纵向排列,我们需要在里面放进去四个 Row
            children: <Widget>[
              // 第一行: 名字和价格
              Padding(
                padding: EdgeInsets.only(bottom: 3),
                child: Row(
                  crossAxisAlignment: CrossAxisAlignment.end,
                  children: <Widget>[
                    Text(
                      '${_item["nm"]}',
                      style: TextStyle(fontSize: 17),
                    ),
                    Text(
                      '${_item["sellPrice"]}',
                      style: TextStyle(
                        fontSize: 18,
                        color: Color.fromARGB(255, 240, 61, 55),
                      ),
                    ),
                    Text(
                      "元起",
                      style: TextStyle(
                        color: Color.fromARGB(255, 240, 61, 55),
                      ),
                    ),
                  ],
                ),
              ),
              // 第二行：地址和距离
              Padding(
                padding: EdgeInsets.only(bottom: 5),
                child: Row(
                  children: <Widget>[
                    // 添加一个弹性盒子模型,它可以占据多余空间
                    Expanded(
                      child: Text(
                        '${_item["addr"]}',
                        style: TextStyle(
                          color: Color.fromARGB(255, 102, 102, 102),
                        ),
                        // 单独处理 文字溢出点点点
                        overflow: TextOverflow.ellipsis,
                        maxLines: 1,
                      ),
                    ),
                    // 影院跟我之间的距离，固定的宽度，然后弹性盒子模型可以占据他之外的其他空间
                    Padding(
                      padding: EdgeInsets.only(left: 10),
                      child: Text(
                        '${_item["distance"]}',
                        style: TextStyle(
                          color: Color.fromARGB(255, 102, 102, 102),
                        ),
                      ),
                    ),
                  ],
                ),
              ),

              // 第三行  优惠信息的 tag， 需要一个个的icon
              Padding(
                padding: EdgeInsets.only(bottom: 5),
                child: Row(
                  children: <Widget>[
                    // 通过三元运算来确定我们的标签是否显示到页面上，如果结果是true，则显示，结果是false，则返回一个Container()，这是一个空盒子，不占据空间
                    _item["tag"]["allowRefund"] == 1
                        ? createTag('退', _defaultgreen)
                        : Container(),

                    _item["tag"]["endorse"] == 1
                        ? createTag('改签', _defaultgreen)
                        : Container(),

                    _item["tag"]["snack"] == 1
                        ? createTag('小吃', _defaultorange)
                        : Container(),
                    // is String 是dart中的语法, 可以判断我们数据是不是String类型，返回值是一个布尔值
                    _item["tag"]["vipTag"] is String
                        ? createTag(_item["tag"]["vipTag"], _defaultorange)
                        : Container(),
                  ],
                ),
              ),

              // 第四行  一个卡片的图标，还有文字 开卡特惠的优惠信息
              _item["promotion"]["cardPromotionTag"] == null
                  ? Container()
                  : Padding(
                      padding: EdgeInsets.only(bottom: 0),
                      child: Row(
                        children: <Widget>[
                          Container(
                            margin: EdgeInsets.only(right: 6),
                            child: Image(
                              width: 16,
                              height: 16,
                              fit: BoxFit.cover,
                              image: AssetImage('images/card.png'),
                            ),
                          ),
                          Text(
                            '${_item["promotion"]["cardPromotionTag"]}',
                            style: TextStyle(
                              fontSize: 13,
                                color: Color.fromARGB(255, 153, 153, 153)),
                          ),
                        ],
                      ),
                    ),
            ],
          ),
        );
      },
    );
  }

  // 改签
  createTag(String title, Color color) {
    return Container(
      padding: EdgeInsets.fromLTRB(2, 0, 2, 1),
      margin: EdgeInsets.only(right: 6),
      child: Text(
        '$title',
        style: TextStyle(color: color, fontSize: 11),
      ),
      decoration: BoxDecoration(
        border: Border.all(
          color: color,
        ),
        borderRadius: BorderRadius.all(Radius.circular(3)),
      ),
    );
  }
}
